package com.xjcs.saplingplan.model.bean

import kotlin.math.max
import kotlin.math.min
import kotlin.math.pow
import kotlin.math.sqrt

class Bubble(
    @JvmField var x: Float, // 气泡的中心坐标
    @JvmField var y: Float, // 气泡的半径
    @JvmField var radius: Float, var dx: Float, // 气泡的速度
    var dy: Float, // 气泡的颜色
    @JvmField var color: Int
) {
    // 更新气泡的位置
    fun update(width: Int, height: Int) {
        x += dx
        y += dy

        // 边界检测，防止气泡超出屏幕
        if (x - radius < 0 || x + radius > width) {
            dx = -dx
            x = max(
                radius.toDouble(),
                min(x.toDouble(), (width - radius).toDouble())
            ).toFloat() // 确保气泡不会卡在边界
        }
        if (y - radius < 0 || y + radius > height) {
            dy = -dy
            y = max(
                radius.toDouble(),
                min(y.toDouble(), (height - radius).toDouble())
            ).toFloat() // 确保气泡不会卡在边界
        }
    }

    // 检测两个气泡是否碰撞
    fun isColliding(other: Bubble): Boolean {
        val distance = sqrt((x - other.x).pow(2) + (y - other.y).pow(2))
        return distance < radius + other.radius
    }

    // 处理碰撞后的速度变化
    fun handleCollision(other: Bubble) {
        val tempDx = dx
        val tempDy = dy
        dx = other.dx
        dy = other.dy
        other.dx = tempDx
        other.dy = tempDy
    }
}